package cn.acac.yygh.cmn.excel;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ExcelListener extends AnalysisEventListener<Student> {

    // 批量插入的数据
    public static final Integer BATCH_INSERT = 10;
    // 存储批量插入的数据的集合
    private List<Student> list = new ArrayList<>();

    //解析Excel中的一条数据，就会调用一次invoke方法
    @Override
    public void invoke(Student student, AnalysisContext analysisContext) {
        // 读取十条数据就进行批量插入操作
        list.add(student);
        if(list.size() >= BATCH_INSERT){
            // 当集合的长度大于等于10的时候将数据插入到数据库中
            // 插入完成后记得清空集合
            list.clear();
        }
        System.out.println("student = " + student);
    }

    // 解析Excel标题的时候调用此方法
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("headMap = " + headMap);
        super.invokeHeadMap(headMap, context);
    }

    // 解析Excel完成后调用的方法，一般做一些收尾工作
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("此处做一些收尾工作！");
        // 如集合的数据不足10条可在此处进行最后一次插入操作

    }
}
